"""
好的，用户现在想要一个通达信公式，筛选出截至昨天数据中，短期内可能上涨的股票。首先，我需要理解用户的需求。他们希望基于历史数据，通过技术指标预测短期内的上涨概率。但要注意，股票市场受多种因素影响，技术指标并不能保证100%准确，所以得在公式中强调这一点。
接下来，我得回顾之前的对话历史。用户之前询问了HMA均线的计算方法，现在转向筛选股票。可能需要结合多个指标来提高准确性。常见的短期上涨信号包括均线金叉、成交量放大、MACD底背离、KDJ超卖等。
首先，考虑均线系统。比如，5日均线上穿10日均线形成金叉，通常被视为短期买入信号。然后，成交量，如果上涨时成交量放大，可能说明有资金流入。MACD的底背离也是一个重要信号，当价格新低但MACD没有新低，可能预示反转。KDJ指标中，J值低于0可能超卖，有反弹可能。另外，ATR指标可以衡量波动性，结合价格突破近期波动区间可能也是一个信号。
然后，我需要将这些指标组合成一个筛选公式。但要注意，通达信的公式语言可能不支持所有复杂逻辑，可能需要简化。比如，MACD底背离的实现比较复杂，可能需要用REF函数来比较当前和之前的数值。
另外，用户提到“截至昨天时间的数据”，所以公式应该基于最新的数据，不需要考虑实时数据。同时，要确保所有指标的计算都是基于昨日收盘后的数据。
可能还需要加入过滤条件，比如股价站在20日均线以上，表示中期趋势向上，增加短期上涨的概率。或者排除成交量过低的股票，避免流动性风险。
然后，我需要测试这些条件组合的有效性。但回测在通达信中可能不太方便，所以最好在公式中注释说明这是基于常见技术分析理论的策略，实际效果需验证。
最后，提醒用户注意风险，技术指标只是辅助工具，不能单独作为投资依据，应结合其他分析和风险管理。
以下是一个基于技术分析常见理论的通达信选股公式模板，通过多维度条件筛选短期可能走强的股票。请注意：此公式仅提供逻辑参考，实际效果需验证，股市有风险，投资需谨慎。
通达信选股公式（短期上涨概率筛选）

    {【趋势动能共振选股】By ChatGPT优化版}
    {核心逻辑：趋势启动 + 量价突破 + 动量加速}

    {————— 参数模块（可自定义调整）—————}
    趋势周期:= 30;      {趋势判定周期，建议20~60}
    动量周期:= 5;       {短期动量周期，建议5~10}
    放量倍数:= 1.8;     {成交量阈值倍数，建议1.2~2.0}
    波动过滤:= 3;       {最大ATR波动率%，过滤高风险股}

    {————— 核心条件1：趋势强度确认 —————}
    {动态均线系统}
    MA_趋势线:= EMA(C, 趋势周期);          {EMA平滑长期趋势}
    趋势角度:= ATAN((MA_趋势线/REF(MA_趋势线,1)-1)*100)*180/3.1416;  {计算趋势线角度}
    COND_趋势:= 趋势角度 > 15;            {趋势线上升角度>15度（强势标准）}

    {————— 核心条件2：量价突破验证 —————}
    {量能突破}
    VOL_基准:= MA(V, 动量周期);           {动态成交量基准}
    COND_放量:= V > VOL_基准 * 放量倍数 AND C > REF(HHV(H, 动量周期),1);  {放量突破近期高点}

    {价格动量}
    RSI_动量:= SMA(MAX(C-REF(C,1),0), 动量周期)/SMA(ABS(C-REF(C,1)), 动量周期)*100;  {动量RSI}
    COND_动量:= RSI_动量 > 60 AND RSI_动量 > REF(RSI_动量, 3);  {动量持续增强}

    {————— 核心条件3：风险控制模块 —————}
    {波动率过滤}
    ATR值:= MA(MAX(MAX(H-L,ABS(REF(C,1)-H)),ABS(REF(C,1)-L)), 动量周期);
    COND_波动:= (ATR值/C) < 波动过滤/100;   {排除日内波动过大的股票}

    {流动性过滤}
    COND_流动性:= V > MA(V, 30) * 0.5;      {成交量不低于30日均量的一半}

    {————— 综合选股条件 —————}
    选股信号:
        COND_趋势 AND     {趋势处于强势阶段}
        COND_放量 AND     {量价突破关键位}
        COND_动量 AND     {短期动量加速}
        COND_波动 AND     {波动率可控}
        COND_流动性;     {基础流动性保障}

公式逻辑解析

    均线系统：
        要求5日、10日、20日均线呈多头排列（COND1），表明中期趋势向上。
        短期均线金叉（CROSS_UP）增强短期上涨信号。

    量价配合：
        当日成交量放大至5日均量的1.2倍以上（COND3），且收阳线，表明资金流入。

    技术指标共振：
        MACD底背离（COND4）：价格创新低但MACD未同步新低，预示下跌动能衰竭。
        KDJ超卖反弹（COND5）：J值从低于0的超卖区回升，反映短期超跌反弹需求。
        ATR突破（COND6）：突破近期波动区间上轨，可能开启趋势行情。

    流动性过滤：
        剔除日成交量低于10万手的股票（VOL_MIN），避免流动性风险。

使用注意事项

    回测验证：
        建议通过通达信“条件选股”功能回测历史数据，调整参数或条件权重（如放宽VOL_MIN或减少条件数量）。

    市场环境适配：
        在震荡市中可弱化趋势条件（如去掉COND1），在单边市中可强化趋势要求。

    风险提示：
        技术指标具有滞后性，需结合基本面、消息面综合判断。
        建议设置止损条件（如跌破5日均线离场）。

    优化方向
        增加动量指标：如加入RSI(6) > 50或CCI突破-100等条件。
        板块联动：通过行业板块强度排名（需自定义板块数据）进一步过滤。
        形态识别：加入“W底突破”“旗形整理”等形态识别条件（需复杂脚本支持）。
        如果需要更简化的版本或针对特定策略调整，可以进一步说明需求！

"""

# from mytt.MyTT import *
from mytt.MyTT_advance import *
from mytt.MyTT_custom import *


def select(df: pd.DataFrame, code: str, quote: dict):
    if len(df.close) < 90:
        df['PASS'] = False
        return df

    O = df.open
    C = df.close
    H = df.high
    L = df.low
    V = df.volume

    # ————— 参数模块（可自定义调整）—————
    趋势周期 = 30   # 趋势判定周期，建议20~60
    动量周期 = 5    # 短期动量周期，建议5~10
    放量倍数 = 1.6  # 成交量阈值倍数，建议1.2~2.0
    波动过滤 = 3    # 最大ATR波动率%，过滤高风险股

    # ————— 核心条件1：趋势强度确认 —————
    # 动态均线系统
    MA_趋势线 = EMA(C, 趋势周期)                                              # EMA平滑长期趋势
    趋势角度 = ATAN((MA_趋势线 / REF(MA_趋势线, 1) - 1) * 100) * 180 / 3.1416  # 计算趋势线角度
    COND_趋势 = 趋势角度 > 15                                                 # 趋势线上升角度>15度（强势标准）

    # ————— 核心条件2：量价突破验证 —————
    # 量能突破
    VOL_基准 = MA(V, 动量周期)  # 动态成交量基准
    COND_放量 = (V > VOL_基准 * 放量倍数) & (C > REF(HHV(H, 动量周期), 1))  # 放量突破近期高点

    # 价格动量
    RSI_动量 = SMA(MAX(C - REF(C, 1), 0), 动量周期) / SMA(ABS(C - REF(C, 1)), 动量周期) * 100  # 动量RSI
    COND_动量 = (RSI_动量 > 60) & (RSI_动量 > REF(RSI_动量, 3))  # 动量持续增强

    # ————— 核心条件3：风险控制模块 —————
    # 波动率过滤
    ATR值 = MA(MAX(MAX(H - L, ABS(REF(C, 1) - H)), ABS(REF(C, 1) - L)), 动量周期)
    COND_波动 = (ATR值 / C) < 波动过滤 / 100  # 排除日内波动过大的股票

    # 流动性过滤
    COND_流动性 = V > MA(V, 30) * 0.5  # 成交量不低于30日均量的一半

    # ————— 综合选股条件 —————
    # 趋势处于强势阶段
    # 量价突破关键位
    # 短期动量加速
    # 波动率可控
    # 基础流动性保障
    选股信号 = COND_趋势 & COND_放量 & COND_动量 & COND_波动 & COND_流动性

    df['PASS'] = 选股信号

    return df
